home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 423_01 / recio200 / rwarn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-15  |  3.6 KB  |  90 lines

  1. /*****************************************************************************
  2.    MODULE: rwarn.c
  3.   PURPOSE: recio warning functions
  4. COPYRIGHT: (C) 1994 William Pierpoint
  5.  COMPILER: Borland C Version 3.1
  6.        OS: MSDOS Version 6.2
  7.   VERSION: 2.00
  8.   RELEASE: April 15, 1994
  9. *****************************************************************************/
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. #include "recio.h"
  16.  
  17. #define rflags(rp)       ((rp)->r_flags)
  18.  
  19. static void (*_r_warnfn)(REC *) = NULL; /* ptr to warning function */
  20.  
  21. /****************************************************************************/
  22. void                             /* returns nothing                         */
  23.     rsetwarnfn(                  /* registers a callback warning function   */
  24.         void(*rwarnfn)(REC *rp)) /* pointer to warning function             */
  25. /****************************************************************************/
  26. {
  27.     _r_warnfn = rwarnfn;         /* point to callback warning function */
  28. }
  29.  
  30. /****************************************************************************/
  31. int                          /* returns warning number (0=no warning        */
  32.     rwarning(                /* gets warning number for record stream       */
  33.         REC *rp)             /* record pointer                              */
  34. /****************************************************************************/
  35. {
  36.     int warnum=0;            /* return warning number */
  37.  
  38.     if (risvalid(rp)) {
  39.          warnum = rflags(rp) / _R_WRN;
  40.          warnum &= _R_WRNMASK;
  41.     }
  42.     return (warnum);
  43. }
  44.  
  45. /****************************************************************************/
  46. int                          /* returns possibly modified warning number    */
  47.     rsetwarn(                /* sets warning number and calls warning fn    */
  48.         REC *rp,             /* record pointer                              */
  49.         int warnum)          /* warning number                              */
  50. /****************************************************************************/
  51. {
  52.     /* if valid record pointer */
  53.     if (risvalid(rp)) {
  54.  
  55.         /* set warning number on stream */
  56.         rflags(rp) |= _R_WRN * (warnum & _R_WRNMASK);
  57.  
  58.         /* invoke callback warning function */
  59.         if (_r_warnfn) _r_warnfn(rp);
  60.  
  61.         /* find out if warnfn() changed warning */
  62.         warnum = rwarning(rp);
  63.     }
  64.     return (warnum);
  65. }
  66.  
  67. /****************************************************************************/
  68. char *                       /* returns warning message                     */
  69.     rstrwarning(             /* gets warning message for rwarning number    */
  70.         int warnum)          /* warning number                             */
  71. /****************************************************************************/
  72. {
  73.     switch (warnum) {
  74.     case 0:         return ("no warning");
  75.     case R_WEMPSTR: return ("empty data string");
  76.     case R_WNOREG:  return ("unable to register function with atexit()");
  77.     case R_WWIDTH:  return ("data too wide for columnar output");
  78.     }
  79.     return ("unknown warning");
  80. }
  81.  
  82. /****************************************************************************/
  83. char *                       /* returns warning message                     */
  84.     rwarnstr(                /* gets warning message for record stream      */
  85.         REC *rp)             /* record pointer                              */
  86. /****************************************************************************/
  87. {
  88.     return (risvalid(rp) ? rstrwarning(rwarning(rp)) : rstrerror(R_EINVAL));
  89. }
  90.